package br.com.salao.session;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.log4j.Logger;

import br.com.salao.ejb.dao.UsuarioDao;
import br.com.salao.ejb.dao.impl.UsuarioDaoImpl;
import br.com.salao.ejb.util.Utils;
import br.com.salao.entity.Usuario;

@Stateless
@Remote(UsuarioBase.class)
public class UsuarioBean implements UsuarioBase{

	/**
	 * @author Dri
	 */
	private static final long serialVersionUID = 1L;

	private Logger logger = Logger.getLogger(UsuarioBean.class.getName());

	@PersistenceContext(unitName = "SalaoBeleza")
	private EntityManager em;	

	public UsuarioBean(){
		//	em = JpaUtil.getEntityManager();
	}

	@TransactionAttribute
	public Usuario inserir(Usuario usuario){

		logger.debug(":: UsuarioBean :: inserir() ::");

		UsuarioDao dao = new UsuarioDaoImpl(em);
		return dao.inserir(usuario);
	}

	@TransactionAttribute
	public Usuario update(Usuario usuario){

		logger.debug(":: UsuarioBean :: update() ::");

		UsuarioDaoImpl dao = new UsuarioDaoImpl(em);
		return dao.update(usuario);
	}

	public boolean isCampoNulo(Usuario usuario,String cidade,String bairro){

		logger.info(":: UsuarioBean :: isCampoNulo() ::");

		if(usuario.getCpf() == null || 
				usuario.getRg() == null || 
				usuario.getNome() == null ||
				usuario.getSobrenome() == null || 
				usuario.getDataNasc() == null || 
				usuario.getEmail() ==null ||
				usuario.getTelefone() == null || 
				usuario.getSexo() == null || 
				cidade == null ||	
				bairro == null ||
				usuario.getEndereco().getCep() == null  ||  
				usuario.getEndereco().getLogradouro() == null || 
				usuario.getEndereco().getNumero() == null) {
			return false;
		}
		return true;		
	}

	public Usuario formatarCampos(Usuario usuario) throws Exception{

		try{
			usuario.setNome(usuario.getNome().trim().toUpperCase());
			usuario.setSobrenome(usuario.getSobrenome().trim().toUpperCase());
			usuario.getEndereco().setLogradouro(Utils.removeAcentosTexto(usuario.getEndereco().getLogradouro()));
			usuario.setCpf(usuario.getCpf().replace(".", ""));
			usuario.setCpf(usuario.getCpf().replace("-", ""));
			usuario.setRg(usuario.getRg().replace(".", ""));
			usuario.setRg(usuario.getRg().replace("-", ""));
		}catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace() + "\n");
			sb.append(e.getCause() + "\n");
			sb.append(e.getMessage() + "\n");

			logger.error(sb.toString());

			e.printStackTrace();
		}

		return usuario;
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public Usuario buscarUsuarioPeloCpf(String cpf) {
		UsuarioDaoImpl dao = new UsuarioDaoImpl(em);
		return dao.buscarUsuarioPeloCpf(cpf);
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public Usuario buscarUsuarioPeloEmail(String email) {
		UsuarioDaoImpl dao = new UsuarioDaoImpl(em);
		return dao.buscarUsuarioPeloEmail(email);
	}	

}
